function ccR_Druid_2()

	if ccrPlayerLevel() >= 10 and ccrPlayerLevel() <= 89 then Druid_Feral_10_89() end
end

function Druid_Feral_10_89()
	-- No form, Move to cat.
	if not ccrPlayerHasBuff(CAT_FORM)
	and not ccrPlayerHasBuff(BEAR_FORM)
	then
		ccrCast(CAT_FORM)
		return
	end

	-- Talents
	ccR_Druid_Wild_Charge()
	ccR_Druid_Renewal()
	ccR_Druid_Cenarion_Ward()

	-- Cat Form
	if ccrPlayerHasBuff(CAT_FORM) then
		-- Abilities
		ccR_Druid_Tigers_Fury()
		ccR_Druid_Predatory_Swiftness()
		if IsStealthed() == nil then
			ccR_Druid_Faerie_Fire()
			ccR_Druid_SkullBash()
		end
		ccR_Druid_Barkskin()
		ccR_Druid_Berserk()
		ccR_Druid_SurvivalInstincts()
		ccR_Druid_Might_Of_Ursoc()
		ccR_Druid_Mighty_Bash()
		-- Functions
		Druid_Savage_Roar_Buff()

		-- Player has swipe, allow ST/AOE use.
		if ccrPlayerHasSpell(SWIPE_FERAL) then

			local vCount = #tblPGetMeleeEnemies
			-- Stealthed
			if IsStealthed() == 1
			and ccrValidTarget()
			then
				if Player:IsBehind(Target) then
					if SpellCanAttack(RAVAGE) then
						ccrCastAttack(RAVAGE)
						return
					else
						if SpellCanAttack(POUNCE) then
							ccrCastAttack(POUNCE)
							return
						else							
							if SpellCanAttack(SHRED) then
								ccrCastAttack(SHRED)
								return
							end
						end
					end
				else
					if SpellCanAttack(POUNCE) then
						ccrCastAttack(POUNCE)
						return
					end
				end
			else
				-- Single Target Rotation
				if (ccRS.Auto_AoE and (vCount >= 1 and vCount <= ccRS.Druid_2_SingleTargetCount))
				or (ccrTargetIsBoss() and ccRS.Auto_AoE_Ignore_On_Boss)
				or (not ccRS.Auto_AoE and not ccRS.Manual_AoE)
				then
					-- Rake
					if not ccrTargetHasDebuff(RAKE) then
						ccR_Druid_Rake()
						return
					else
						-- Savage Roar
						if not ccrPlayerHasBuff(SAVAGE_ROAR)
						and ccrPlayerHasSpell(SAVAGE_ROAR)
						then
							ccR_Druid_Savage_Roar()
							return
						else
							if ccRS.Druid_2_RakeEveryone
							and SpellIsReady(RAKE)
							and Druid_CheckForMissingRake()
							then
								Druid_ApplyMissingRake()
								return
							else
								-- Rip
								if ccrPlayerHasSpell(RIP)
								and not ccrTargetHasDebuff(RIP)
								and ccrTargetIsBoss()
								then
									ccR_Druid_Rip()
									return
								else
									-- Ferocious Bite
									ccR_Druid_Ferocious_Bite()
									return
								end
							end
						end
					end
				return
				end

				-- AoE Rotation
				if (ccRS.Auto_AoE and vCount >= ccRS.Druid_2_AoECount)
				or (not ccRS.Auto_AoE and ccRS.Manual_AoE)
				then
					ccR_Druid_Disorienting_Roar()
					ccR_Druid_Ursols_Vortex()
					-- Savage Roar
					if ccrPlayerHasSpell(SAVAGE_ROAR)
					and not ccrPlayerHasBuff(SAVAGE_ROAR)
					then
						ccR_Druid_Savage_Roar()
						return
					else			
						-- Thrash all
						if ccrPlayerHasSpell(THRASH_FERAL)
						and Druid_CheckForMissingThrash()
						then
							Druid_ApplyMissingThrash()
							return
						else
							if ccrPlayerHasSpell(FEROCIOUS_BITE)
							and ccrComboPoints() >= 4
							and SpellCanAttack(FEROCIOUS_BITE)
							then
								ccrCastAttack(FEROCIOUS_BITE)
								return
							else
								if not Druid_CheckForMissingThrash() then
									-- Swipe
									ccR_Druid_Swipe()
									return
								end
							end
						end
					end
				end
			end
		else
			-- No AoE Available - Single Target Only

			-- Stealthed
			if IsStealthed() == 1
			and ccrValidTarget()
			then
				if Player:IsBehind(Target) then
					if SpellCanAttack(RAVAGE) then
						ccrCastAttack(RAVAGE)
						return
					else
						if SpellCanAttack(SHRED) then
							ccrCastAttack(SHRED)
							return
						end
					end					
				else
					if SpellCanAttack(POUNCE) then
						ccrCastAttack(POUNCE)
						return
					end
				end
			else
				-- Rake All Melee Targets
				if ccRS.Druid_2_RakeEveryone 
				and SpellIsReady(RAKE)
				and Druid_CheckForMissingRake()
				then
					Druid_ApplyMissingRake()
				end
				-- Rake
				if not ccrTargetHasDebuff(RAKE) then
					ccR_Druid_Rake()
				else
					-- Savage Roar
					if not ccrPlayerHasBuff(SAVAGE_ROAR)
					and ccrPlayerHasSpell(SAVAGE_ROAR)
					then
						ccR_Druid_Savage_Roar()
					else
						-- Rip
						if ccrPlayerHasSpell(RIP)
						and not ccrTargetHasDebuff(RIP)
						then
							ccR_Druid_Rip()
						else
							-- Ferocious Bite
							ccR_Druid_Ferocious_Bite()
						end
					end
				end
			end
		end
	end
	-- Bear Form
	if ccrPlayerHasBuff(BEAR_FORM) then
		-- Run the guardian rotation
		ccR_Druid_3()
	end
end